<?php
/**
 *tiempoServicio.php nos indicará el tiempo medio en el que las plazas estan libres o ocupadas
 *para un perido de tiempo concreto
 *@param $_GET["fecha"] nos indica a partir de que fecha queremos consultar los datos
 *@param $_GET["opt"] nos indica si queremos conocer los datos de un día, una semana o un mes
 *@param $_GET["modo"] determinará si las estadísticas se nos dan para conocer el tiempo medio
 *de ocupacion de las plazas o el tiempo medio en que las plazas estan libres
 **/


/**
 *@function nos indicará a que dispositivo nos estamos refiriendo
 **/
function identifica (&$mac){
    switch ($mac){

        case '0013A20011111111':
            return 0;
        case '0013A20022222222':
            return 1;
        case '0013A20033333333':
            return 2;
        case '0013A200403E0DCF':
            return 3;
        case '0013A20066666666':
            return 4;
        
    }
}

/**
 *	tiempoServ nos devuelve la tiempo medio de estacionamiento en un periodo concreto de tiempo
 *	@param $hi indica la hora inicial en que se quiere consultar el tiempo medio, valor pasado por referencia
 *	@param $hf indica la hora hasta la que se va a consultar el tiempo medio, valor pasado por referencia
 *  @param $vocup indica si queremos consultar los tiempos correspondientes a plazas
 *  libres(valor=0) o las ocupadas (valor = 1)
 *	@param $info contendrá el resultado de consultar la ocupación de la hora, valor pasado por referencia
*/
function tiempoServ(&$hi,&$hf,&$vocup,&$topcion,&$factorTiempo,&$info){
	$rnombre;
    $formato='Y-m-d H:i:s';
    $hi_TS=strtotime($hi);
	$hf_TS= strtotime($hf);
    $sql="SELECT MAC,TIEMPO,OCUPADO FROM `Prueba` WHERE
          TIEMPO>=TIMESTAMP('$hi') AND TIEMPO<=TIMESTAMP('$hf') AND OCUPADO=$vocup
          GROUP BY TIEMPO,MAC";
    $sqlDev="SELECT MAC,COUNT(*) AS CUENTA FROM `Prueba` WHERE TIEMPO>=TIMESTAMP('$hi') AND
            TIEMPO<=TIMESTAMP('$hf') AND OCUPADO=$vocup GROUP BY MAC";

    $countDisp=array(0,0,0,0,0);
	$rnombre = mysql_query($sql) or die('Query failed: ' . mysql_error());
    //echo "<br>".$sql."</br>";
    $mac=array("0013A20011111111","0013A20022222222","0013A20033333333",
               "0013A200403E0DCF","0013A20066666666");

    //echo "<br>".$sqlDev."</br>";
    $rows=mysql_query($sqlDev) or die('Query failed: ' . mysql_error());
    $i=0;
    while($fila_cuenta = mysql_fetch_array($rows, MYSQL_ASSOC)){
        $countDisp[$i]=$fila_cuenta['CUENTA'];
        $i++;
    }
    
    /*cada posicion de $diferencias contiene una tupla de los tiempos finales e iniciales
    para cada dispositivo*/
    $diferencias=array(array(0,0,0),array(0,0,0),array(0,0,0),array(0,0,0),array(0,0,0));
    //$aux=new ArrayObject();
    /*$calculo es el array con una posicion para cada dispositivo con tuplas entre el valor de las
     diferencias de tiempo acumulado y la cuenta de registros de tiempo para realizar la media */
    $calculo=array(array(0,0),array(0,0),array(0,0),array(0,0),array(0,0));
    
    $numTuplas=mysql_num_rows($rnombre);
    //echo "<br>".$numTuplas."</br>";
    if ($numTuplas!=0){
        while($fila = mysql_fetch_array($rnombre, MYSQL_ASSOC)){
            $dev= identifica($fila['MAC']); //echo "<br>".$dev."</br>";   
            if ($diferencias[$dev][2]==0){
                $diferencias[$dev][0]= strtotime($fila['TIEMPO']);
            }else{
                $diferencias[$dev][1]=strtotime($fila['TIEMPO']);
                //echo "<p> MAC:".$diferencias[0][0]."</p>";
                /*La diferencia ($dif) de tiempo transcurrido entre un la lecturafinal y la inicial mas los
                2 min que dura el periodo inicial será el tiempo que ha estado libre la plaza o ocupada*/
                $auxdif= $diferencias[$dev][1]-$diferencias[$dev][0];
                if ($auxdif!=120)
                    $auxdif= $diferencias[$dev][1]-$diferencias[$dev][0]-120;
                $array_dif= array("MAC" => $mac[$dev],"DIFERENCIA" =>$auxdif);
                //echo "<p> MAC:".$array_dif['MAC']."    "."Diferencia:".$array_dif['DIFERENCIA']."</p>";
                $aux[]=$array_dif;
                $diferencias[$dev][0]=$diferencias[$dev][1];
            }
            $diferencias[$dev][2]++;
        }
        $j=0;
        $tupla;
        foreach ($aux as $tupla){
            $dev= identifica($tupla['MAC']);
            //echo "<p> Dispositivo #:".$dev."</p>";
            $calculo[$dev][0]+=$tupla['DIFERENCIA'];
            $calculo[$dev][1]++;
            //echo "<p> Dispositivo #:".$dev."Valor diferencias ".$calculo[$dev][0]." Numero tomas  ".$calculo[$dev][1]."</p>";
        }
        for ($z=0;$z<5;$z++){
            if ($countDisp[$z]==$factorTiempo){
                if ($vocup==0){
                            $aux=array("MAC"=>$mac[$z],"TIEMPO"=>(($hi_TS+60*60)*1000),"TIEMPOSERV"=>0);
                            //echo "<p> Dispositivo #:  ".$aux['MAC']."  Hora:  ".$aux['TIEMPO']."  Tservicio:  ".$aux['TIEMPOSERV'];
                            $info[]=$aux;
                }else{    
                            $aux=array("MAC"=>$mac[$z],"TIEMPO"=>(($hi_TS+60*60)*1000),"TIEMPOSERV"=>$topcion);
                            //echo "<p>Contador :  ".$contador."Dispositivo #:  ".$aux['MAC']."  Hora:  ".$aux['TIEMPO']."  Tservicio:  ".$aux['TIEMPOSERV'];
                            $info[]=$aux;
                }
            }else{
                if ($calculo[$z][1]!=0)
                    $calculo[$z][0]/=$calculo[$z][1];
                $aux=array("MAC"=>$mac[$z],"TIEMPO"=>(($hi_TS+60*60)*1000),"TIEMPOSERV"=>$calculo[$z][0]*1000);
                //echo "<p> Dispositivo #:  ".$aux['MAC']."  Hora:  ".$aux['TIEMPO']."  Tservicio:  ".$aux['TIEMPOSERV'];
                $info[]=$aux;
            }
        }
    }else{
        if ($vocup==0){
            for ($z=0;$z<5;$z++){      
                $aux=array("MAC"=>$mac[$z],"TIEMPO"=>(($hi_TS+60*60)*1000),"TIEMPOSERV"=>0);
                //echo "<p> Dispositivo #:  ".$aux['MAC']."  Hora:  ".$aux['TIEMPO']."  Tservicio:  ".$aux['TIEMPOSERV'];
                $info[]=$aux;
            }
        }else{
            for ($z=0;$z<5;$z++){      
                $aux=array("MAC"=>$mac[$z],"TIEMPO"=>(($hi_TS+60*60)*1000),"TIEMPOSERV"=>$topcion);
                //echo "<p> Dispositivo #:  ".$aux['MAC']."  Hora:  ".$aux['TIEMPO']."  Tservicio:  ".$aux['TIEMPOSERV'];
                $info[]=$aux;
            }   
        }
    }

        mysql_free_result($rnombre);
}

require("db_prowsn.php");
$datos=array();
$ocupacion=array();
$fecha_i=$_GET["fecha"]; 
$fechai_TS=strtotime($fecha_i);
$formato='Y-m-d H:i';
$fechaf_TS=0;
$opcion=$_GET["opt"];
$modo=$_GET["modo"];

	switch ($opcion){
		case "dia":
            for ($i=0;$i<24;$i++){
                $fechaf_TS=$fechai_TS+60*60;
                $fecha_f=date($formato,$fechaf_TS);
                $topcion=60*60*1000;
                $factor=30;
                
                tiempoServ($fecha_i,$fecha_f,$modo,$topcion,$factor,$datos);
                
                $fechai_TS=$fechaf_TS; //incrementamos una hora para consultar la siguiente
                $fecha_i=date($formato,$fechai_TS);//para indicar en la consulta la siguiente hora
            }

            //$fechaf_TS= $fechai_TS+(24*60*60);//avanzamos 1dia (24*60*60 segundos)
            //$fecha_f=date($formato,$fechaf_TS);//fecha final convertida a fecha con formato 2000-12-20 21:34:01
            //
            //$factor=24*30; //30 tomas por hora y 24 h de un día
		     /*tiempoServ($fecha_i,$fecha_f,$modo,$datos);*/
			break;
		case "semana":
            $topcion=24*60*60*1000;
            $factor=30*24;
            for ($i=0;$i<7;$i++){
                $fechaf_TS=$fechai_TS+24*60*60;
                $fecha_f=date($formato,$fechaf_TS);

                tiempoServ($fecha_i,$fecha_f,$modo,$topcion,$factor,$datos);
                
                $fechai_TS=$fechaf_TS; //incrementamos una hora para consultar la siguiente
                $fecha_i=date($formato,$fechai_TS);//para indicar en la consulta la siguiente hora
            }
			break;
		case "mes":
            $num_dias=date('t',$fechai_TS);//para tomar el numero de días del mes
            $factor=30*24;
            for ($i=0;$i<$num_dias;$i++){
                $fechaf_TS=$fechai_TS+24*60*60;
                $fecha_f=date($formato,$fechaf_TS);
                $topcion=24*60*60*1000;
                
                tiempoServ($fecha_i,$fecha_f,$modo,$topcion,$factor,$datos);
                
                $fechai_TS=$fechaf_TS; //incrementamos una hora para consultar la siguiente
                $fecha_i=date($formato,$fechai_TS);//para indicar en la consulta la siguiente hora
            }



            $num_dias=date('t',$fechai_TS);//para tomar el numero de días del mes
            $fechaf_TS= $fechai_TS+($num_dias*24*60*60);//avanzamos 1 mes ($num_dias_mes*24*60*60 segundos)
            $fecha_f=date($formato,$fechaf_TS);//fecha final convertida a fecha con formato 2000-12-20 21:34:01
            $factor=$num_dias*24*30;

			break;
	}
    $dim=count($datos);
    //echo "<p> Dimension  ".$dim."</p>";
    $aux=array();
    if ($_GET['global']==0)
        echo json_encode($datos);
    else{
        for ($i=0;$i<$dim;$i+=5){
            $tserv_avg=$datos[$i]['TIEMPOSERV']+$datos[$i+1]['TIEMPOSERV']+$datos[$i+2]['TIEMPOSERV']+
                       $datos[$i+3]['TIEMPOSERV']+$datos[$i+4]['TIEMPOSERV'];
            //echo "<p> Media tiempo servicio ".$datos[$i]['TIEMPOSERV'].$datos[$i+1]['TIEMPOSERV'].$datos[$i+2]['TIEMPOSERV'].$datos[$i+3]['TIEMPOSERV'].$datos[$i+4]['TIEMPOSERV']."</p";
            $tserv_avg/=5;
            $aux[]=array("FECHA"=>$datos[$i]['TIEMPO'],"TIEMPOSERV"=>$tserv_avg);
        }
        //echo "<p> Media tiempo servicio ".$datos[143]['MAC'].$datos[143]['TIEMPOSERV']."</p";
        //echo "<p> Media tiempo servicio ".$datos[143]['MAC'].$datos[143]['TIEMPOSERV']."</p";
           echo json_encode($aux);
         /*   for ($i=0;$i<$dim/5;$i++){
                echo "<p>Fecha:  ".$aux[$i]["FECHA"]."  Tservicio:  ".$aux[$i]["TIEMPOSERV"]."</p>";
              }*/  
    }
    mysql_close($link);
?>